export interface CMapBaseLayer {
  url: string;
  sort: number;
  id: string;
  layersGroupGuid: string;
  name: string;
  icon: string;
  headers: any;
  show: boolean;
  serverType: 'wmts' | 'wms' | 'tianditu' | 'image';
}

//动态事件位置图层
export interface CMapEventLayer {
  id: string;
  show: boolean;
  name: string;
  isFlyTo: boolean;
  txtField: string; //显示文本
  txtFieldMode: number; //显示文本方式【默认0直接显示1悬停显示】
  txtStyle: [CMapLabelStyle]; //文字类型
  geoStyle: [CMapGeojsonStyle]; // geojson 样式
  whereFilter?: [any]; //过滤条件信息
  fieldRelation?: CMapFieldRelation; // 字段关联
  extParams?: CMapExtParams; // 扩展参数
  geoJson: any; //需要图层上看到数据
  pitch?: any; //角度
  czml: any; //
  tag?: string; //用于标记时间点，方便筛选
}

export interface CMapCustomLayer {
  serverType:
    | 'wmts'
    | 'wms'
    | 'geojson'
    | 'terrain'
    | 'tianditu'
    | 'czml'
    | 'image'
    | 'html'
    | 'tileset'
    | 'flight';
  geometryType: number; //（0：表示基础底图, 1:基础图层、2:marker点, 3:点, 4:线, 5:面）
  globalFieldName: string; // 全局字段名称
  id: string;
  bizCode: string;
  sort: number;
  layersGroupGuid: string;
  groupFullPath: string;
  url: string;
  data?: any;
  name: string;
  headers: any;
  show: boolean;
  isFlyTo: boolean;
  txtField: string; //显示文本
  txtFieldMode: number; //显示文本方式【0直接显示1悬停显示】
  txtStyle: [CMapLabelStyle]; //文字类型
  geoStyle: [CMapGeojsonStyle]; // geojson 样式
  whereFilter: [any]; //过滤条件信息
  fieldRelation: CMapFieldRelation; // 字段关联
  extParams: CMapExtParams; // 扩展参数
}
// 自定义图层树
export interface CMapTreeNode {
  key: string; // 唯一标识
  label: string; // 名称
  children: CMapTreeNode[]; // 子节点
}
// 自定义扩展参数
export interface CMapExtParams {
  componentName?: string; // 自定义点击弹出内容组件名称
  componentTo?: string; //自定义组件显示位置'left' | 'leftSide' | 'right' | 'rightSide' | 'modal' | 'popover' | 'centerSide';
  componentWidth?: number; //自定义组件显示宽
  componentTitle?: string; //自定义组件标题
  pixelRange: number; // 聚合像素范围
  minimumClusterSize: number; // 最小聚合数量
  scale: number; //缩放
  position: number[]; //html 文本位置
  html?: String; //html 文本内容
  pixelOffset?: number[]; //html 文本偏移量
  minX?: number;
  minY?: number;
  maxX?: number;
  maxY?: number;
  viewType?: 'topDown' | 'side' | 'FP' | 'TP'; // 俯视、侧视、第一人称跟随，俯视跟随，暂时仅serverType == 'flight'时生效
}
// geojson样式
export interface CMapGeojsonStyle {
  image?: string;
  width?: number;
  height?: number;
  scale?: number;
  //面、线
  material?: string; // 填充颜色
  outlineColor?: string; // 描边颜色
  outlineWidth?: number; // 描边宽度
  arcType?: number; // NONE: 0, GEODESIC: 1, RHUMB: 2
  shadows?: number; // DISABLED: 0, ENABLED: 1, CAST_ONLY: 2, RECEIVE_ONLY: 3
  zIndex?: number;
  heightOffset?: number; //高度偏移量
  disableDepthTestDistance?: number; //深度检测距离
  heightReference?: number; //NONE: 0, CLAMP_TO_GROUND: 1, RELATIVE_TO_GROUND: 2
  distanceDisplayCondition?: number[]; //显示在距相机的距离处的属性，多少区间内是可以显示的
  verticalOrigin?: Cesium.VerticalOrigin; // 垂直方向对齐方式，如锚点类型图片可以采用BOTTOM底边对齐
}
// 文字样式
export interface CMapLabelStyle {
  font: string; // 字体及大小
  fillColor: string; // 字体颜色
  backgroundColor: string; // 背景颜色
  pixelOffset: number[]; // 背景偏移量
  scale: number; // 应用于图像的统一比例。比例大于会1.0放大标签，而比例小于会1.0缩小标签。
  outlineColor: string; // 描边颜色
  outlineWidth: number; // 描边宽度
  distanceDisplayCondition: number[]; //显示在距相机的距离处的属性，多少区间内是可以显示的
  position?: 'center' | 'top';
}

export interface CMapSelectCesiumObject {
  model: number;
  label: any;
  billboard: any;
}

// 字段映射
export interface CMapFieldRelation {
  fieldRelationValue?: any; //字段映射
  fieldRelationUnit?: any; //字段值单位
  fieldRelationMapping?: any; //字段值映射
}
